package com.easygem.system.service;

import com.easygem.common.error.SystemException;
import com.easygem.common.model.system.DeptClient;
import com.easygem.common.model.system.Menu;
import com.easygem.common.model.system.Role;
import com.easygem.common.model.system.User;
import com.easygem.common.vo.system.*;

import java.util.List;
import java.util.Map;

/**
 * @Author 文晓平
 * @Date 2024/12/7 15:43
 * @Version 1.0
 **/
public interface UserService {

    /**
     * 根据用户名查询用户
     *
     * @param name 用户名
     * @return
     */
     User findUserByName(String name);
    /**
     * 根据用户名查询用户
     *
     * @param name 用户名
     * @param accountName 账户名
     * @return
     */

     User findUserByName(String name,String accountName);

    /**
     * 查询用户角色
     *
     * @param id 用户id
     * @return
     */
     List<Role> findRolesById(Long id) throws SystemException;

    /**
     * 根据用户角色查询用户的菜单
     * 菜单: menu+button
     *
     * @param roles 用户的角色
     * @return
     */
    List<Menu> findMenuByRoles(List<Role> roles);

    /**
     * 加载菜单
     *
     * @return
     */
    List<MenuNodeVO> findMenu();

    /**
     * 用户列表
     * @param userVO
     * @return
     */
    PageVO<User> findUserList(Integer pageNum, Integer pageSize, UserVO userVO);

    /**
     * 根据部门编号查询用户列表
     * @param deptId  部门编号
     * @return
     */
    List<UserVO> findUserListByDept(Long deptId);


    /**
     * 删除用户
     *
     * @param id
     */
    void deleteById(Long id) throws SystemException;

    /**
     * 更新状态
     *
     * @param id
     * @param status
     */
    void updateStatus(Long id, Boolean status) throws SystemException;

    /**
     * 添加用户
     * @param userVO
     */
    void add(UserVO userVO) throws SystemException;

    /**
     * 更新用户
     *
     * @param id
     * @param userVO
     */
    void update(Long id, UserEditVO userVO) throws SystemException;

    /**
     * 编辑用户
     *
     * @param id
     * @return
     */
    UserEditVO edit(Long id) throws SystemException;

    /**
     * 已拥有的角色ids
     *
     * @param id 用户id
     * @return
     */
    List<Long> roles(Long id) throws SystemException;

    /**
     * 分配角色
     *
     * @param id
     * @param rids
     */
    void assignRoles(Long id, Long[] rids) throws SystemException;

    /**
     * 所有用户
     *
     * @return
     */
    List<User> findAll();

    /**
     * 用户登入
     *
     * @param username
     * @param password
     * @param accountName 账户
     * @return
     */
    String login(String username, String password,String accountName) throws SystemException;


    /**
     * 用户详情
     *
     * @return
     */
    UserInfoVO info() throws SystemException;


    /**
     * 更新用户状态
     * @param userId  用户编号
     * @param status  用户状态
     * @return
     */
    void updateUserStatus( Long userId,Integer status) throws SystemException;

    /**
     * 更新多个用户状态
     * @param map  多个用户编号，用户状态
     * @return
     */
    void updateUserStatusMore(Map<String, Object> map) throws SystemException;

    /**
     * 查询资源归属人
     * @return
     */
    List<User> findUsersList();

    List<User> findCreateUsersList();






    /**
     * 后台查询用户列表
     * @param userVO
     * @return
     */
    PageVO<User> getUserList(Integer pageNum, Integer pageSize, UserVO userVO);
    /**
     *
     * 根据账号名得到该账号下的所有部门信息
     * @return
     */
    List<DeptClient> getDeptId(String accountName);
    /**
     * 得到前台所有的角色
     * @return
     */
    List<String> getAccountName();
    /**
     * 更新用户状态（冻结或解冻）
     * @param userId  用户编号
     * @param status  用户状态
     * @return
     */
    int updateStatus(Long userId,Integer status);
    /**
     * 根据用户id得到用户信息
     * @param userId id
     * @return
     */
    User selectUserById(Long userId);

    /**
     * 删除或批量删除（用户下线）
     * @param userId id集合
     * @return
     */
    int deleteUserById(Long[] userId);




    /**
     * 修改密码
     * @param user 新密码
     * @throws SystemException
     */
    void updatePwd(User user);
}
